# FinCERT-Client
[![Build status](https://ci.appveyor.com/api/projects/status/hpsbfj3qds34i4yb?svg=true)](https://ci.appveyor.com/project/diev/fincert-client)
[![GitHub Release](https://img.shields.io/github/release/diev/FinCERT-Client.svg)](https://github.com/diev/FinCERT-Client/releases/latest)

Получение по API фидов и бюллетеней из FinCERT Банка России.

Здесь два проекта:

* FeedsAPI - обновленный до NET8 старый референсный проект для скачивания
фидов с добавлением двусторонней аутентификации TLS, которой в нем не было.
Развивать далее проект не планируется.
* FinCERT-Client - новый структурированный проект с добавлением Bulletins
API - возможность скачивать бюллетени и файлы к ним - в дополнение к фидам.

Эта программа работает и в ЗОЭ, и в ЗПЭ, в режиме read-only, и она не
медленная, а с паузами между запросами, чтобы не вызвать блокировку DDoS.

### Feeds API / Фиды

Фиды скачиваются актуальные, затирая прежние, контроль необходимости
обновления пока не ведется. Ставьте нужное время по Планировщику.

### Bulletins API / Бюллетени 

Бюллетени скачиваются в отдельные папки с датой, временем, названием.
Внутри каждой папки есть файл Bulletin.txt, в котором то же, что видно и
в ЛК, а также все файлы, которые были приложениями к бюллетеню.

В первый раз будет скачано 100 (если не ограничить параметром `-limit`)
последних бюллетеней.

При последующих запусках будут скачиваться новые последние, пока не будет
достигнуто ограничение API в 100, ограничение параметром или встречена
папка, что была уже загружена ранее.

Чтобы скачать более ранние (за предел 100), нужно использовать параметр
`-offset`. Имейте в виду, что если этот параметр не 0, то отключается
прекращение скачивания при встрече ранее скачанной папки и будут скачаны
все недостающие, попавшие в этот лимит.

## Config / Конфигурация

При первом запуске и отсутствии файла конфигурации `.config.json` он
создается рядом с программой с параметрами по умолчанию.
Никакие другие конфиги, переменные среды окружения и т.п. не используются.

Важно заполнить вашими данными значения параметров:

* `MyThumbprint` - отпечаток сертификата клиента, зарегистрированного на
сервере в ЛК и имеющего допуск к серверу;
* `Login` - учетная запись на сервере (логин);
* `Password` - пароль учетной записи.

Если пароль пуст, то программа запросит логин и пароль из хранилища
Windows Credential Manager по строке `FinCERT`.

Если указываете файловые пути, то по правилам JSON надо удваивать `\\`.

## Parameters / Опциональные параметры командной строки

* `-checklist` - сформировать в папке `BulletinsDownloads\CheckList`
комплект файлов для приложения к чек-листу на подключение.
* `-limit 100` - число от 1 до 100 - ограничение числа скачиваемых
бюллетеней. 100 - по умолчанию и максимум - это ограничение API - обойти
его невозможно - только указанием параметра `-offset`.
* `-offset 0` - число от 0 и выше - сдвиг начала скачиваемых бюллетеней.
0 - по умочанию. Указание этого параметра не 0 переключает режим поведения
при встрече ранее скачанной папки:
  * 0 - скачивание прекращается;
  * не 0 - ранее скачанная папка пропускается, продолжается перебор (в
пределах значения `-limit`).

## Exit codes / Коды возврата

* 0 - успешно;
* 1 - ошибка;
* 2 - что-то не найдено;
* 4 - внешняя ошибка.

## Requirements / Требования

* .NET 8
* CryptoPro CSP
* Сертификат TLS клиента и цепочка доверия
* Логин и пароль

## Versioning / Порядок версий

Номер версии программы указывается по нарастающему принципу:

* Требуемая версия .NET (8);
* Год текущей разработки (2024);
* Месяц без первого нуля и день редакции (624 - 24.06.2024);
* Номер билда - просто нарастающее число для внутренних отличий.
Если настроен сервис AppVeyor, то это его автоинкремент.

Продукт развивается для собственных нужд, и поэтому
Breaking Changes могут случаться чаще, чем это принято в SemVer.

При обновлении программы рекомендуется сохранить предыдущий конфиг,
удалить его из папки с программой, чтобы она создала новый, перенести
необходимые старые значения в новый конфиг перед новым запуском
программы.

## License / Лицензия

Licensed under the [Apache License, Version 2.0](LICENSE).
